perm filename G7[KID,KMC] blob sn#122906 filedate 1974-11-15 generic text, type T, neo UTF8
TITLE G7
;THIS MEMBER PROGRAM OF THE NEW KIDS SUITE SHOWS PHRASE CONSTRUCTION
;IN AN ANALOGOUS MANNER TO THE WORD CONSTRUCTION OF GAME6.
EXTERNAL MAINLP,DPINIT,PDPGET,CLEAR,SHOW,AIVECT,CHINIT
EXTERNAL LV2,KILL,TYOPTR,TIKCNT,DDRREL,DMDDIR,SPEAK
INTERNAL DOTHNG,GAMNAM,GAMENO,DIRECT


	;THE FOLLOWING PSEUDO PROGRAM MAY EXPLAIN THE OPERATION.

	;    SHOW ALPHABET ON POG1;
	;    FOR EACH OF THE APPROP 3 WORDS DO
	;    BEGIN
	;	FOR EACH OF SIX POSITIONS DO
	;	CLEAR POG2, POG3 OR POG4
	;	BEGIN
	;	    FOR EACH OF THE LETTERS DO
	;	    BEGIN
	;		COMPUTE COORDINATES;
	;		DRAW INVISIBLE VECTOR TO IT;
	;		PUT OUT THE CHARACTER;
	;	    END;
	;	    WAIT A SHORT WHILE;
	;	END;
	;  	SHOW ON POG2,POG3 OR POG4
	;	SAY THE APPROPRIATE SOUND;
	;    END.


X1←6
X2 ← X1+1
X3 ← X2+1
X4 ← X3+1
X5 ← X4+1
X6 ← X5+1
P←17
A←13	;SAME AS X6
B←14
C←15

GAMNAM:	0
GAMENO:	000700000000		;GAME NUMBER FOR HISTORY FILE
DIRECT:	BLOCK	=1		;NO PICTURE FILES.

DOTHNG:	;ELIMINATE MOST OF THE NON-ALPHANUMERICS.
	CAILE	X1,132
	JRST	MAINLP		;REJECT CHARCTERS ABOVE ALPHABET.
	CAIGE	X1,060
	JRST	MAINLP		;REJECT CHARACTERS BELOW DIGITS.
	SUBI	X1,040		;RECODE TO SIXBIT
	SETZM	TIKCNT
	MOVEI	A,2
	PUSHJ	P,KILL		;CLEAR POG2
	MOVEI	A,3
	PUSHJ	P,KILL		;CLEAR POG3
	MOVEI	A,4
	PUSHJ	P,KILL		;CLEAR POG4

	;FIRST ORDER OF BUSINESS IS TO DISPLAY THE ALPHABET ON POG1.
	PUSHJ	P,CLEAR	
	MOVEI	X2,0		;THIS WILL COUNT THE ALPHABET OFF.
ALPHLP:	HLRZ	A,LTRPOS(X2)	;X COMPONENT.
	HRRZ	B,LTRPOS(X2)	;Y COMPONENT.
	PUSHJ	P,AIVECT	;INVISIBLE VECTOR TO APPROP. POSN.
	MOVEI	A,0
	MOVEI	B,0
	MOVEI	C,46
	MOVEI	0,6
	DPB	0,[POINT 3,C,27]
	PUSHJ	P,LV2		;GVECT(0,0,46,7,0)
	MOVEI	A,6
	MOVEI	B,=1000
	MOVEI	C,-=512
	PUSHJ	P,CHINIT	;CHINIT(6,1000,-512)
	MOVE	X3,X2
	ADDI	X3,101		;CONVERT POINTER TO A LETTER
	IDPB	X3,TYOPTR	;PUT THE CHARACTER IN THE BUFFER
	ADDI	X2,1
	CAIGE	X2,=26
	JRST	ALPHLP

	MOVEI	A,1
	PUSHJ	P,SHOW		;DISPLAY THE ALPHABET


MAIN:	;NOW WE PREPARE FOR THE MAIN LOOP OF THE PROGRAM (DISPLAY 3 WDS)
	MOVEI	X2,0		;WILL LOOP 3 TIMES (X2 = 0,1,2)
LOOP1S:	;START OF LOOP 1
	MOVE	X3,X1		;GET THE LETTER
	SUBI	X3,20		;RECODE SO CODE FOR 0 IS 0
	IMULI	X3,3
	ADD	X3,X2		;ADDRES OF WORD TO BE SHOWN
	MOVE	X4,WORDS(X3)	;GET THE WORD TO BE SHOWN
	MOVEM	X4,THISWD
	MOVE	X4,SOUNDS(X3)	;GET THE FILE TO BE SAID
	MOVEM	X4,THISND
	MOVEI	X3,5		;DO LOOP2 6 TIMES (X3= 5,4,3,2,1,0)
LOOP2S:	;START OF LOOP2
	PUSHJ	P,CLEAR		;CLEAR DISPLAY BUFFER.
	MOVEI	X4,=30		;DO LOOP3 6 TIMES (X4= 30,24,18,12,6,0)
LOOP3S:	;START OF LOOP 3 (THE INNER-MOST LOOP)
	MOVE	X5,THISWD	;WILL DISSECT THIS WORD
	LSH	X5,0(X4)	;NEXT CHARACTER TO TOP X5.
	LSH	X5,-=30
	JUMPE	X5,LOOP3E	;DO NOTHING IF IT IS A SPACE
	MOVEM	X5,THISCH	;THIS IS CURRENT CHARACTER.
	SUBI	X5,041		;NORMALISE SO CODE(A) = 0.
	MOVE	A,LTRPOS(X5)	;THE GRID POSITION OF THIS LETTER.
	MOVEM	A,THISLP
	MOVE	X5,X4
	ADDI	X5,5
	SUB	X5,X3		;THIS WILL INDEX A POSN.
	MOVE	A,TULIP(X5)	;THE COORDINATE PAIR IN THE TULIP
	MOVEM	A,THISTP	;TULIP POINT  COORDINATE PAIR
	HLRZ	A,THISLP	;X COORDINATE OF LETTER POSITION
	HLRZ	B,THISTP	;X COORDINATE OF TULIP POINT
	PUSHJ	P,COORD
	MOVE	X5,B		;COMPUTED X COORDINATE
	HRRZ	A,THISLP	;Y COORDINATE OF LETTER POSITION
	HRRZ	B,THISTP	;Y COORDINATE OF TULIP POINT
	MOVEI	C,0
	SUB	C,X2		;2-WORDNUMBER
	IMULI	C,=60		;60 POSITIONS OF SPACE PER LINE
	ADD	B,C		;BUMP THE Y COORDINATE MOST FOR 1ST WORD.
	PUSHJ	P,COORD
	MOVE	A,X5		;THIS WAS THE SAVED X COORD.
	PUSHJ	P,AIVECT	;VECTOR TO COMPUTED POSITION.
	MOVEI	A,0
	MOVEI	B,0
	MOVEI	C,46
	MOVEI	0,7
	DPB	0,[POINT 3,C,27]
	PUSHJ	P,LV2		;GVECT(0,0,46,7,0)
	MOVEI	A,7
	MOVEI	B,=1000
	MOVEI	C,-=500		
	PUSHJ	P,CHINIT	;CHINIT(7,1000,-500)

	MOVE	X5,THISCH	;GET THE CURRENT CHARACTER.
	ADDI	X5,040		;ASCII CHARACTER
	IDPB	X5,TYOPTR	;PUT CHARACTER OUT.

LOOP3E:	SUBI	X4,6
	CAIL	X4,0
LOOP3X:	JRST	LOOP3S

	SKIPGE	TIKCNT
	JRST	.+4		;TIME HAS RUN OUT
	MOVEI	X6,0
	CALL	X6,[SIXBIT /SLEEP/]
	JRST	.-4		;SEE IF ENOUGH TIME LOST.

	MOVE	A,X2
	ADDI	A,2
	PUSHJ	P,SHOW		;DISPLAY ON POG2,POG3 OR POG4
 	MOVEI	X6,1		;10 TIKS = 1/6 SECOND
	MOVEM	X6,TIKCNT

	SUBI	X3,1
	CAIL	X3,0
LOOP2X:	JRST	LOOP2S

	MOVE	A,THISND	;FILE NAME
	PUSHJ	P,DMDDIR
	JUMPN	A,.+2		;NOTHING TO SAY IF BAD EXIT
	PUSHJ	P,SPEAK

	ADDI	X2,1
	CAIG	X2,2
LOOP1X:	JRST	LOOP1S

	JRST	MAINLP


COORD:	;A S/R WHICH TAKES A TULIP POINT COORDINATE IN B AND A LETTER
	;POSITION IN A AND COMPUTES USING X3 (FRAME NO.) A FINAL COORDINATE.
	LSH	A,=18
	ASH	A,-=18
	LSH	B,=18
	ASH	B,-=18
	IMUL	A,X3		;α*X3
	IMUL	A,X3		;α*X3*X3
	MOVEI	C,6
	SUB	C,X3		;6-X3
	IMUL	C,B		;(6-X)β
	IDIVI	A,6		;α*X3*X3/6 IS IN A
	ADD	A,C		;α*X3*X3/6 + β(6-X)
	IDIVI	A,6
	MOVE	B,A		;RESULT  [ α*X3*X3/6 + β(6-X) ]/6
	POPJ	P,


LTRPOS:	;THIS ARRAY GIVES THE COORDINATES OF THE LETTERS OF THE ALPHABET.
APOSN:	XWD	-=500,-=320
BPOSN:	XWD	-=500,-=380
CPOSN:	XWD	-=500,-=440
DPOSN:	XWD	-=455,-=500
EPOSN:	XWD	-=410,-=500
FPOSN:	XWD	-=365,-=500
GPOSN:	XWD	-=320,-=500
HPOSN:	XWD	-=275,-=500
IPOSN:	XWD	-=230,-=500
JPOSN:	XWD	-=185,-=500
KPOSN:	XWD	-=140,-=500
LPOSN:	XWD	-=095,-=500
MPOSN:	XWD	-=050,-=500
NPOSN:	XWD	-=005,-=500
OPOSN:	XWD	 =040,-=500
PPOSN:	XWD	 =085,-=500
QPOSN:	XWD	 =130,-=500
RPOSN:	XWD	 =175,-=500
SPOSN:	XWD	 =220,-=500
TPOSN:	XWD	 =265,-=500
UPOSN:	XWD	 =310,-=500
VPOSN:	XWD	 =355,-=500
WPOSN:	XWD	 =400,-=500
XPOSN:	XWD	 =445,-=500
YPOSN:	XWD	 =490,-=440
ZPOSN:	XWD	 =490,-=380
	XWD	 =490,-=320



TULIP:	;THIS ARRAY GIVES THE TULIP FORMED BY THE IDEAL LOCI OF THE SIX
	;LETTERS AS THEY MIGHT MOVE FROM (0,-350) TO THE WORD.
LETTR0:	XWD	 =000,-=350
	XWD	-=160,-=220
	XWD	-=300,-=090
	XWD	-=360, =040
	XWD	-=250, =170
	XWD	-=090, =300
LETTR1:	XWD	 =000,-=350
	XWD	-=100,-=220
	XWD	-=200,-=090
	XWD	-=240, =040
	XWD	-=160, =170
	XWD	-=050, =300
LETTR2:	XWD	 =000,-=350
	XWD	-=050,-=220
	XWD	-=100,-=090
	XWD	-=120, =040
	XWD	-=080, =170
	XWD	-=010, =300
LETTR3:	XWD	 =000,-=350
	XWD	 =020,-=220
	XWD	 =040,-=090
	XWD	 =050, =040
	XWD	 =030, =170
	XWD	 =030, =300
LETTR4:	XWD	 =000,-=350
	XWD	 =080,-=220
	XWD	 =170,-=090
	XWD	 =210, =040
	XWD	 =140, =170
	XWD	 =070, =300
LETTR5:	XWD	 =000,-=350
	XWD	 =160,-=220
	XWD	 =300,-=090
	XWD	 =360, =040
	XWD	 =250, =170
	XWD	 =110, =300


WORDS:	;SETS OF TRIPLETS FOR THE VARIOUS ALPHANUMERICS.
WORD0:	SIXBIT	/ZERO  /
	SIXBIT	/ ZERO /
	SIXBIT	/  ZERO/
WORD1:	SIXBIT	/ ONE  /
	SIXBIT	/  RED /
	SIXBIT	/  ROSE/
WORD2:	SIXBIT	/ TWO  /
	SIXBIT	/  ICE /
	SIXBIT	/CREAMS/
WORD3:	SIXBIT	/THREE /
	SIXBIT	/ BLIND/
	SIXBIT	/  MICE/
WORD4:	SIXBIT	/FOUR  /
	SIXBIT	/FLYING/
	SIXBIT	/  FISH/
WORD5:	SIXBIT	/ FIVE /
	SIXBIT	/  FAT /
	SIXBIT	/ FROGS/
WORD6:	SIXBIT	/ SIX  /
	SIXBIT	/ BIG  /
	SIXBIT	/ BOYS /
WORD7:	SIXBIT	/SEVEN /
	SIXBIT	/ TALL /
	SIXBIT	/ TREES/
WORD8:	SIXBIT	/EIGHT /
	SIXBIT	/LITTLE/
	SIXBIT	/ BIRDS/
WORD9:	SIXBIT	/ NINE /
	SIXBIT	/ APPLE/
	SIXBIT	/ PIES /
	BLOCK	25		;21 WORDS WHICH WILL NEVER BE LOOKED AT
WORDA:	SIXBIT	/  AN  /
	SIXBIT	/ ANGRY/
	SIXBIT	/  ANT /
WORDB:	SIXBIT	/ BIG  /
	SIXBIT	/BUTTER/
	SIXBIT	/ FLY  /
WORDC:	SIXBIT	/CAN   /
	SIXBIT	/ YOU  /
	SIXBIT	/ COME /
WORDD:	SIXBIT	/ DOGS /
	SIXBIT	/ LIKE /
	SIXBIT	/ BONES/
WORDE:	SIXBIT	/  I   /
	SIXBIT	/ EAT  /
	SIXBIT	/ EGGS /
WORDF:	SIXBIT	/ FAT  /
	SIXBIT	/ FRIED/
	SIXBIT	/ FISH /
WORDG:	SIXBIT	/CHEW  /
	SIXBIT	/ GOOEY/
	SIXBIT	/  GUM /
WORDH:	SIXBIT	/HELP  /
	SIXBIT	/ HELP /
	SIXBIT	/  HELP/
WORDI:	SIXBIT	/  I   /
	SIXBIT	/ LIKE /
	SIXBIT	/  YOU /
WORDJ:	SIXBIT	/ JOEY /
	SIXBIT	/ JUMPS/
	SIXBIT	/  UP  /
WORDK:	SIXBIT	/ KICK /
	SIXBIT	/ THE  /
	SIXBIT	/  CAN /
WORDL:	SIXBIT	/ LISA /
	SIXBIT	/LAUGHS/
	SIXBIT	/ A LOT/
WORDM:	SIXBIT	/ MARY /
	SIXBIT	/ MOO  /
	SIXBIT	/  COW /
WORDN:	SIXBIT	/ NO   /
	SIXBIT	/  YES /
	SIXBIT	/   NO /
WORDO:	SIXBIT	/OH    /
	SIXBIT	/  OH  /
	SIXBIT	/    OH/
WORDP:	SIXBIT	/PEEL  /
	SIXBIT	/ AN   /
	SIXBIT	/ APPLE/
WORDQ:	SIXBIT	/ QUICK/
	SIXBIT	/QUICK /
	SIXBIT	/ QUACK/
WORDR:	SIXBIT	/RICE  /
	SIXBIT	/  IS  /
	SIXBIT	/  NICE/
	SIXBIT	/SING  /
	SIXBIT	/  A   /
	SIXBIT	/  SONG/
WORDT:	SIXBIT	/TOUCH /
	SIXBIT	/ YOUR /
	SIXBIT	/  TOES/
WORDU:	SIXBIT	/UP    /
	SIXBIT	/ AND  /
	SIXBIT	/ DOWN /
WORDV:	SIXBIT	/VERY  /
	SIXBIT	/ VERY /
	SIXBIT	/  GOOD/
WORDW:	SIXBIT	/WASH  /
	SIXBIT	/ THE  /
	SIXBIT	/  WALL/
WORDX:	SIXBIT	/ X X X/
	SIXBIT	/ MEANS/
	SIXBIT	/KISSES/
WORDY:	SIXBIT	/YOUR  /
	SIXBIT	/YELLOW/
	SIXBIT	/ SHIRT/
WORDZ:	SIXBIT	/ZEE   /
	SIXBIT	/ FOR  /
	SIXBIT	/ ZEBRA/

SOUNDS:	;LIST OF SOUNDS CORRESPONDING ONE TO ONE TO WORDS.
SND0:	SIXBIT	/N017/
	SIXBIT	/N027/
	SIXBIT	/N037/
SND1:	SIXBIT	/N117/
	SIXBIT	/N127/
	SIXBIT	/N137/
SND2:	SIXBIT	/N217/
	SIXBIT	/N227/
	SIXBIT	/N237/
SND3:	SIXBIT	/N317/
	SIXBIT	/N327/
	SIXBIT	/N337/
SND4:	SIXBIT	/N417/
	SIXBIT	/N427/
	SIXBIT	/N437/
SND5:	SIXBIT	/N517/
	SIXBIT	/N527/
	SIXBIT	/N537/
SND6:	SIXBIT	/N617/
	SIXBIT	/N627/
	SIXBIT	/N637/
SND7:	SIXBIT	/N717/
	SIXBIT	/N727/
	SIXBIT	/N737/
SND8:	SIXBIT	/N817/
	SIXBIT	/N827/
	SIXBIT	/N837/
SND9:	SIXBIT	/N917/
	SIXBIT	/N927/
	SIXBIT	/N937/
	BLOCK	25	;THIS 21 WORDS IS NEVER LOOKED AT
SNDA:	SIXBIT	/A17/
	SIXBIT	/A27/
	SIXBIT	/A37/
SNDB:	SIXBIT	/B17/
	SIXBIT	/B27/
	SIXBIT	/B37/
SNDC:	SIXBIT	/C17/
	SIXBIT	/C27/
	SIXBIT	/C37/
SNDD:	SIXBIT	/D17/
	SIXBIT	/D27/
	SIXBIT	/D37/
SNDE:	SIXBIT	/E17/
	SIXBIT	/E27/
	SIXBIT	/E37/
SNDF:	SIXBIT	/F17/
	SIXBIT	/F27/
	SIXBIT	/F37/
SNDG:	SIXBIT	/G17/
	SIXBIT	/G27/
	SIXBIT	/G37/
SNDH:	SIXBIT	/H17/
	SIXBIT	/H27/
	SIXBIT	/H37/
SNDI:	SIXBIT	/I17/
	SIXBIT	/I27/
	SIXBIT	/I37/
SNDJ:	SIXBIT	/J17/
	SIXBIT	/J27/
	SIXBIT	/J37/
SNDK:	SIXBIT	/K17/
	SIXBIT	/K27/
	SIXBIT	/K37/
SNDL:	SIXBIT	/L17/
	SIXBIT	/L27/
	SIXBIT	/L37/
SNDM:	SIXBIT	/M17/
	SIXBIT	/M27/
	SIXBIT	/M37/
SNDN:	SIXBIT	/N17/
	SIXBIT	/N27/
	SIXBIT	/N37/
SNDO:	SIXBIT	/O17/
	SIXBIT	/O27/
	SIXBIT	/O37/
SNDP:	SIXBIT	/P17/
	SIXBIT	/P27/
	SIXBIT	/P37/
SNDQ:	SIXBIT	/Q17/
	SIXBIT	/Q27/
	SIXBIT	/Q37/
SNDR:	SIXBIT	/R17/
	SIXBIT	/R27/
	SIXBIT	/R37/
SNDS:	SIXBIT	/S17/
	SIXBIT	/S27/
	SIXBIT	/S37/
SNDT:	SIXBIT	/T17/
	SIXBIT	/T27/
	SIXBIT	/T37/
SNDU:	SIXBIT	/U17/
	SIXBIT	/U27/
	SIXBIT	/U37/
SNDV:	SIXBIT	/V17/
	SIXBIT	/V27/
	SIXBIT	/V37/
SNDW:	SIXBIT	/W17/
	SIXBIT	/W27/
	SIXBIT	/W37/
SNDX:	SIXBIT	/X17/
	SIXBIT	/X27/
	SIXBIT	/X37/
SNDY:	SIXBIT	/Y17/
	SIXBIT	/Y27/
	SIXBIT	/Y37/
SNDZ:	SIXBIT	/Z17/
	SIXBIT	/Z27/
	SIXBIT	/Z37/

THISWD:	0	;WORD
THISND:	0	;SOUND
THISLP:	0	;LETTER POSITION
THISCH:	0	;CHARACTER
THISTP:	0	;TULIP POINT

TEMP:	0
END